import pygame
import random

# 游戏屏幕大小
SCREEN_RECT = pygame.Rect(0, 0, 480, 700)
# 敌机的定时器事件常量
CREATE_ENEMY_EVENT = pygame.USEREVENT
class GameSprite:
    pass

class Background(GameSprite):
    """游戏背景精灵"""
    # def __init__(self, is_alt=False):
    #     image_name = "./images/me1.png"
    #     super().__init__(image_name)
    #
    #     # 判断是否交替图片，如果是，将图片设置到屏幕顶部
    #     if is_alt:
    #         self.rect.y = -self.rect.height
    def __init__(self):

        # 1. 调用父类方法，创建敌机精灵，并且指定敌机的图像
        super().__init__("./images/enemy1.png")

        # 2. 设置敌机的随机初始速度 1 ~ 3
        self.speed = random.randint(1, 3)

        # 3. 设置敌机的随机初始位置
        self.rect.bottom = 0

        max_x = SCREEN_RECT.width - self.rect.width
        self.rect.x = random.randint(0, max_x)
    def update(self):

        # 飞机水平移动
        self.rect.x += self.speed

        # 判断屏幕边界
        if self.rect.left < 0:
            self.rect.left = 0
        if self.rect.right > SCREEN_RECT.right:
            self.rect.right = SCREEN_RECT.right

        super().update()

        # 判断敌机是否移出屏幕
        if self.rect.y >= SCREEN_RECT.height:
            # 将精灵从所有组中删除
            self.kill()
    def __del__(self):
        print("敌机挂了 %s" % self.rect)


class Hero(GameSprite):
    """英雄精灵"""

    def fire(self):

        for i in (1, 2, 3):
            # 1. 创建子弹精灵
            bullet = Bullet()

            # 2. 设置精灵的位置
            bullet.rect.bottom = self.rect.y - i * 20
            bullet.rect.centerx = self.rect.centerx

            # 3. 将精灵添加到精灵组
            self.bullets.add(bullet)

        for i in (1, 2, 3):
            # 1. 创建子弹精灵
            bullet = Bullet()

            # 2. 设置精灵的位置
            bullet.rect.bottom = self.rect.y - i * 20
            bullet.rect.centerx = self.rect.centerx

            # 3. 将精灵添加到精灵组
            self.bullets.add(bullet)

    def update(self):

        # 飞机水平移动
        self.rect.x += self.speed

        # 判断屏幕边界
        if self.rect.left < 0:
            self.rect.left = 0
        if self.rect.right > SCREEN_RECT.right:
            self.rect.right = SCREEN_RECT.right

    # 获取用户按键
    # keys_pressed = pygame.key.get_pressed()

    # if keys_pressed[pygame.K_RIGHT]:
    #     self.hero.speed = 2
    # elif keys_pressed[pygame.K_LEFT]:
    #     self.hero.speed = -2
    # else:
    #     self.hero.speed = 0

    def fire(self):
        print("发射子弹...")
    # def __init__(self, is_alt=False):
    #     image_name = "./images/background.png"
    #     super().__init__(image_name)
    #     # 判断是否交替图片，如果是，将图片设置到屏幕顶部
    #     if is_alt:
    #         self.rect.y = -self.rect.height
    #     # 设置初始位置
    #     self.rect.centerx = SCREEN_RECT.centerx
    #     self.rect.bottom = SCREEN_RECT.bottom - 120


class Bullet(GameSprite):
    """子弹精灵"""

    # def __init__(self):
    #     super().__init__("./images/bullet1.png", -2)

    def update(self):
        super().update()

        # 判断是否超出屏幕，如果是，从精灵组删除
        if self.rect.bottom < 0:
            self.kill()


class Enemy(GameSprite):
    """敌机精灵"""

    # def __init__(self):
        # 1. 调用父类方法，创建敌机精灵，并且指定敌机的图像
        # super().__init__("./images/enemy1.png")

        # 2. 设置敌机的随机初始速度

        # 3. 设置敌机的随机初始位置

    def update(self):
        # 1. 调用父类方法，让敌机在垂直方向运动
        super().update()

        # 2. 判断是否飞出屏幕，如果是，需要将敌机从精灵组删除
        if self.rect.y >= SCREEN_RECT.height:
            print("敌机飞出屏幕...")